/*****************************************************************************
 * boer
 *****************************************************************************
 * Router.java
 *----------------------------------------------------------------------------
 * 版权HeartArea所有，联系ding_cuiping@163.com
 *----------------------------------------------------------------------------
 * Version    Date       By            Comment
 * 1.0        2014-3-21    Poppy       新建
 *****************************************************************************/
package net.heartarea.boer.apps.weixin;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

import net.heartarea.boer.apps.weixin.pojo.TextMsgBean;
import net.heartarea.boer.util.CommonUtil;

import org.springframework.stereotype.Service;

import com.eightspace.server.common.log.LogManagment;

/**
 * 分发接口
 * 
 * @author Poppy
 * @date 2014-3-21
 * @since 1.0
 */
@Service("router")
public class Router {

	/**
	 * 日志对象
	 */
	private static LogManagment log = LogManagment.getLogger(Router.class);

	/**
	 * 消息处理(被动推送消息)
	 * 
	 * @author Poppy
	 * @date 2014-3-19
	 * @param request
	 * @return
	 * @since 1.0
	 */
	public String msg(HttpServletRequest request) throws ServletException,
			IOException {
		// 定义返回值
		String respStr = "";
		try {
			// xml请求解析
			Map<String, String> requestMap = CommonUtil.analysisXml(request);
			// 消息类型
			String msgType = requestMap.get("MsgType");
			// 被动返回消息Bean
			TextMsgBean textMsgBean = new TextMsgBean();
			// 设置发送者账号
			textMsgBean.setToUserName(requestMap.get("FromUserName"));
			// 设置接收者账号
			textMsgBean.setFromUserName(requestMap.get("ToUserName"));
			// 设置创建时间
			textMsgBean.setCreateTime(System.currentTimeMillis());
			// 设置消息类型
			textMsgBean.setMsgType("text");
			// 根据消息类型回复不同的消息内容
			if (msgType.equals("text")) {
				// 设置回复消息内容
				textMsgBean.setContent("文本消息");
			} else if (msgType.equals("image")) {
				// 设置回复消息内容
				textMsgBean.setContent("图片消息");
			} else if (msgType.equals("voice")) {
				// 设置回复消息内容
				textMsgBean.setContent("语音消息");
			} else if (msgType.equals("video")) {
				// 设置回复消息内容
				textMsgBean.setContent("视频消息");
			} else if (msgType.equals("location")) {
				// 设置回复消息内容
				textMsgBean.setContent("地理位置消息");
			} else if (msgType.equals("link")) {
				// 设置回复消息内容
				textMsgBean.setContent("链接消息");
			} else if (msgType.equals("event")) {
				// 获取事件类型
				String event = requestMap.get("Event");
				if (event.equals("subscribe")) {
					// 设置回复消息内容
					textMsgBean.setContent("订阅事件");
				} else if (event.equals("unsubscribe")) {
					// 设置回复消息内容
					textMsgBean.setContent("取消订阅事件");
				} else if (event.equals("LOCATION")) {
					// 设置回复消息内容
					textMsgBean.setContent("上报地理位置事件");
				} else if (event.equals("CLICK")) {
					// 设置回复消息内容
					textMsgBean.setContent("自定义菜单事件");
				} else if (event.equals("VIEW")) {
					// 设置回复消息内容
					textMsgBean.setContent("点击菜单跳转链接事件");
				}
			}
			// 将bean转成xml
			respStr = CommonUtil.textMessageToXml(textMsgBean);
		} catch (Exception e) {
			log.error("消息处理异常", e);
		}
		// 用json串返回结果
		return respStr;
	}

}
